package Terminal.View.Gestori;

import java.util.ArrayList;
import java.util.Map;

import Terminal.Controller.CGestireProgettiControl;
import Terminal.Eccezioni.ExceptionTimelogging;
import Terminal.Entity.Dominio.EProgetto;
import Terminal.Entity.Dominio.ESottoprogetto;
import Terminal.View.JBarraNavigazione;
import Terminal.View.JBottoni;
import Terminal.View.JDescrizione;
import Terminal.View.JElenco;
import Terminal.View.TimeLoggingFrame;
import Terminal.View.Progetto.JBottoniProgettoForm;
import Terminal.View.Progetto.JBottoniProgettoVista;
import Terminal.View.Progetto.JDescrizioneProgettoForm;
import Terminal.View.Progetto.JDescrizioneProgettoVista;
import Terminal.View.Progetto.JElencoProgetto;

public class GestoreProgetto extends GestoreLavoro {

	private static GestoreProgetto _istanza;
	private CGestireProgettiControl controller = new CGestireProgettiControl();
	
	private GestoreProgetto()
	{}
	
	public static GestoreProgetto istanza()
	{
		if (_istanza == null)
			_istanza = new GestoreProgetto();
		return _istanza;
	}
	
	@Override
	public void smistaScenario(String scenario)
	{
		switch (scenario) 
		{
			case "Visualizza": 
				this.visualizza();
				break;
				
			case "VisualizzaSpecifico": 
				this.visualizza();
				break;
				
			case "Rimuovi":
				this.rimuovi();
				break;
				
			case "Salva":
				this.salvaProgetto();
				break;
				
			case "Aggiorna":
				this.aggiornaProgetto();
				break;				
				
			case "Nuovo": 
				this.nuovo();
				break;	

			case "Modifica": 
				this.modifica();
				break;	
				
			case "Elimina": 
				this.elimina();
				break;	
	
			case "CambiaVisualizzazioneProgetto": 
				this.cambiaVisualizzazione();
				break;						
				
			default:
				this.visualizza();
				break;
		}
				
	}

	private void rimuovi() {
		
		int indiceprj = this.elenco.getSelectedIndex();
		controller.selectProgettoByIndex(indiceprj);
		
		controller.eliminaProgetto();
		TimeLoggingFrame.istanza().getPannello().pulisci();
		visualizza();
	}

	private void salvaProgetto() {
			
		Map<String,String> dati = ((JDescrizioneProgettoForm) this.descrizione).cattura();
		
		String nome = dati.get("nome");
		String inizio = dati.get("inizio");
		String scadenza = dati.get("scadenza");
		String budget = dati.get("budget");
		String descrizione = dati.get("descrizione");
		
		try{
			
			controller.controllodati(nome, inizio, scadenza, budget, descrizione);
		controller.nuovoProgetto(nome, inizio, scadenza, budget, descrizione);
		this.visualizza();
		}catch (ExceptionTimelogging e){
			GestoreErrore.istanza().smista("Errore","CreaProgetto");
		}
		
	}
	
	private void aggiornaProgetto() {
		
		Map<String,String> dati = ((JDescrizioneProgettoForm) this.descrizione).cattura();
		
		String nome = dati.get("nome");
		String inizio = dati.get("inizio");
		String scadenza = dati.get("scadenza");
		String budget = dati.get("budget");
		String descrizione = dati.get("descrizione");
		
		try{
			
		controller.controllodati(nome, inizio, scadenza, budget, descrizione);
		controller.modificaProgetto(nome, inizio, scadenza, budget, descrizione);
		this.visualizza();	
		}catch (ExceptionTimelogging e){
			GestoreErrore.istanza().smista("Errore","CreaProgetto");
		}
	}
	
	public int getProgettoSelezionato()
	{
		
		return this.elenco.getSelectedIndex();
	}

	@Override
	protected ArrayList<String> getListaElenco() {
		ArrayList<String> progetti = controller.getProgettiToStringList();
		return progetti;
	}

	@Override
	protected Object getElementoSelezionato() {
		
		EProgetto prj = controller.selectProgettoByIndex( this.elenco.getSelectedIndex() );
		return prj;
	}

	@Override
	protected JElenco setElenco(ArrayList<String> stringhe) {
		return new JElencoProgetto(stringhe);
	}

	@Override
	protected JDescrizione setDescrizioneVista() {
		return new JDescrizioneProgettoVista();
	}

	@Override
	protected JDescrizione setDescrizioneForm() {
		return new JDescrizioneProgettoForm();
	}

	@Override
	protected JBottoni setBottoniVista() {
		return new JBottoniProgettoVista();
	}

	@Override
	protected JBottoni setBottoniForm( boolean aggiorna ) {
		JBottoni bottoni =  new JBottoniProgettoForm();
		((JBottoniProgettoForm) bottoni).setAggiorna(aggiorna);
		return bottoni;
	}	
	
	@Override
	protected JBarraNavigazione setBarraNavigazione() {
		//return new JBarraNavigazione();
		JBarraNavigazione navigazione = new JBarraNavigazione();
		navigazione.setIndietroEnabled(true);
		
		if(controller.getProgettiToStringList().size()!=0)
		{
		EProgetto prj = controller.selectProgettoByIndex(0);
		
		navigazione.setNavigazione("<html><b>Progetto:</b> "+ prj.getNome() + "</html>");
		}
		
		return navigazione;
		
	
	}
	
}
